JSP 내장 객체

✒️ 2025-06-21 22:54 내용 수정


JSP 내장 객체

Scriptlet에서만 사용할 수 있는 객체

객체 타입 설명
request javax.servlet.http.HttpServletRequest 클라이언트의 요청(request) 정보가 담긴 객체
doGet(), doPost() 메서드의 첫 번째 parameter와 동일한 역할을 함
response javax.servlet.http.HttpServletResponse 요청(request)에 대한 응답(response)를 보낼 때 사용하는 객체
doGet(), doPost() 메서드의 두 번째 parameter와 동일한 역할을 함
session javax.servlet.HttpSession HTTP session을 구현한 객체. Session의 정보를 저장할 때 사용
out javax.servlet.jsp.JspWriter 응답에 포함될 내용을 출력할 때 사용
application javax.servlet.ServletContext JSP 페이지가 속하는 웹 어플리케이션 전체에서 공유하는 객체
config javax.servlet.ServletConfig JSP 페이지의 설정 정보를 저장한 객체
page java.lang.Object JSP 페이지로부터 생성된 Servlet. JSP 페이지 객체 자신
pageContext javax.servlet.jsp.PageContext JSP 페이지의 context 정보를 제공
exception java.lang.Throwable 예외 발생 시 생성되는 예외 객체
isErrorPage="true"인 페이지에서만 사용 가능

request 객체

구분 메서드 설명
요청 파라미터 String getParameter(String name) 요청 파라미터 이름이 name인 값을 반환. 값이 없으면 null 반환
String[] getParameterValues(String name) 요청 파라미터 이름이 name인 모든 값을 배열로 반환. 값이 없으면 null 반환
java.util.Enumeration getParameterNames() 모든 요청 파라미터의 이름과 값을 Enumeration 객체 타입으로 반환
java.util.Map getParameterMap() 모든 요청 파라미터의 이름과 값을 Map 객체 타입으로 반환
요청 HTTP 헤더 String getHeader(String name) 설정한 name의 헤더 값을 반환
java.util.Enumeration getHeaders(String name) 설정한 name의 헤더 목록 값을 반환
java.util.Enumeration getHeaderNames() 모든 헤더의 이름을 반환
int getIntHeader(String name) 설정한 name의 헤더 값을 정수로 반환
long getDateHeader(String name) 설정한 name의 헤더 값을 시간 값으로 반환
javax.servlet.http.Cookie getCookies() 모든 Cookie값 반환
웹브라우저/서버 String getRemoteAddr() 웹 브라우저의 IP 주소 반환
long getContentLength() 웹 브라우저의 요청 파라미터의 길이를 반환
String getCharacterEncoding() 웹 브라우저의 문자 인코딩을 반환
String getContentType() 웹 브라우저의 콘텐츠 유형을 반환
String getProtocol() 웹 브라우저의 요청 프로토콜을 반환
String getMethod() 웹 브라우저의 HTTP 요청 메서드(GET, POST)를 반환
String getRequestURI() 웹 브라우저가 요청한 URI 경로를 반환
String getContextPath() 현재 JSP 페이지의 웹 어플리케이션 context 경로를 반환
String getServerName() 서버의 이름을 반환
int getServerPort() 서버의 포트 번호를 반환
String getQueryString() 웹 브라우저의 전체 요청 파라미터 문자열(query string)을 반환
ServletRequest 상속 void setAttribute(String name, Object obj) request 객체에 Attribute를 설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 웹 페이지에서 작성한 내용을 넘겨주기 -->
	<form action="request01_process.jsp" method="post">
	<p> 아이디 : <input name="id"> </p>
	<p> 비밀번호 : <input name="password" type="password"> </p>
	<p> <input type="submit" value="전송"> </p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% // request 기본 객체를 이용해 웹 브라우저에서 전송된 데이터 받기
		request.setCharacterEncoding("utf-8"); // 인코딩 설정
		String id = request.getParameter("id");
		String password = request.getParameter("password");
	%>
	<p> 아이디 : <%= id %> </p>
	<p> 비밀번호 : <%= password %> </p>
</body>
</html>

request 1.png

request 2.png

<!-- Header 정보 확인해보기 -->
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% 
		Enumeration<String> en = request.getHeaderNames();
		while (en.hasMoreElements()) {
			String headerName = en.nextElement();
			String headerValue = request.getHeader(headerName);
			out.println(headerName + " : " + headerValue + "<br>");
		}
	%>	
</body>
</html>

request 3.png


response 객체

항목 forward redirect
동작 서버 내부에서 이동 클라이언트에게 재요청
주소 URL이 변경되지 않음 URL이 변경됨
요청/응답 객체 그대로 전달 새 요청으로 처리
속도 빠름 상대적으로 느림
사용 내부 처리의 흐름을 유지할 때 외부 페이지 이동
새 요청이 필요할 때
구분 메서드 설명
페이지 이동 void sendRedirect(String url) 설정한 URL 페이지로 강제 이동
응답 HTTP 헤더 void addCookie(Cookie cookie) cookie를 추가
void addDateHeader(String name, long date) 설정한 헤더 name에 날짜와 시간 추가
void addHeader(String name, String value) 설정한 헤더 name에 value를 추가
void addIntHeader(String name, int value) 설정한 헤더 name에 정수 value 추가
void setDateHeader(String name, long date) 설정한 헤더 name에 날짜와 시간을 설정
void setHeader(String name, String value) 설정한 헤더 name에 value를 설정
void setIntHeader(String name, int value) 설정한 헤더 name에 정수 value 설정
boolean containsHeader(String name) 설정한 헤더 name이 HTTP 헤더에 포함되어 있는지 여부 반환
String getHeader(String name) 설정한 헤더 name 값 반환
응답 컨텐츠 void setContentType(String type) 웹 브라우저에 응답할 MIME 유형 설정
String getContentType() 웹 브라우저에 응답할 MIME 유형 반환
void setCharacterEncoding(String charset) 웹 브라우저에 응답할 문자 인코딩 설정
String getCharacterEncoding() 웹 브라우저에 응답할 문자 인코딩 반환
void sendError(int status_code, String message) 웹 브라우저에 응답할 에러 코드와 메시지를 설정
void setStatus(int status_code) 웹 브라우저에 응답할 HTTP 코드를 설정
<!-- 정보를 받을 로그인 페이지 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="response01_process.jsp" method="post">
		<p> 아이디 : <input name="id"> </p>
		<p> 비밀번호 : <input name="password" type="password"> </p>
		<p> <input type="submit" value="전송"> </p>
	</form>
</body>
</html>
<!-- 아이디와 비밀번호를 받아 로그인 실패 여부를 판단하는 파일 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	String[][] account = {{"관리자", "1111"}, {"aaa", "1234"}, {"user", "0000"}};
%>
    
<%
	request.setCharacterEncoding("utf-8");
	String id = request.getParameter("id");
	String password = request.getParameter("password");
	
	if (id.equals(account[0][0]) && password.equals(account[0][1])) {
		response.sendRedirect("response01_admin_success.jsp");
	} else if (id.equals(account[1][0]) && password.equals(account[1][1])
			|| id.equals(account[2][0]) && password.equals(account[2][1])) {
		response.sendRedirect("response01_success.jsp");
	} else {
		response.sendRedirect("response01_fail.jsp");
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
<!-- 일반 로그인 성공 페이지 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p> 로그인을 성공했습니다. </p>
</body>
</html>
<!-- 관리자 로그인 성공 페이지 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p style="font-weigth:bold; color:blue;"> 관리자 로그인을 성공했습니다. </p>
</body>
</html>
<!-- 로그인 실패 페이지 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p style="color:red;">로그인에 실패했습니다.</p>
	<p><a href="response01.jsp">로그인 페이지로 돌아가기</a>
</body>
</html>

out 객체

메서드 설명
void print(String str) str을 웹 브라우저에 출력
void println(String str) str을 웹 브라우저에 줄바꿈을 적용하여 출력
void newLine() 웹 브라우저에 줄바꿈을 출력
int getBufferSize() 현재 출력 버퍼의 크기를 반환
int getRemaining() 현재 남아 있는 출력 버퍼의 크기를 반환
void clear() 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비움
이미 버퍼가 flush 되었다면 IOException 발생
void clearBuffer() clear()와 비슷하지만 버퍼가 이미 flush되었을 때 IOException이 발생하지 않음
void flush() 현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 비움
boolean isAutoFlush() 출력 버퍼가 채워졌을 때 자동 처리 여부 결정. true는 자동 flush, false는 수동 flush
<!-- 웹 페이지에 출력할 내용 작성 시 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	String str = "선언문에서 만든 String";
%>

<%
	out.println("out 내장 객체는 scriptlet에서만 사용할 수 있습니다.");
	out.print(str);
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<br>
	이 곳에 작성된 내용도 웹 페이지에 표시 됩니다. <br>
	<%= str %>은 이렇게도 출력할 수 있습니다. <br>
	위 내용에서 entity code를 사용해서 &lt;%= str %&gt;으로 출력했음을 알 수 있습니다.
</body>
</html>

out.png


예제

  1. out.print()을 사용하여 html을 출력하도록 했을 때
<!-- out.print()을 사용하여 html을 출력하도록 했을 때-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style>
		table{border: 2px solid black;
			  border-collapse: collapse;
		}
	</style>
</head>
<body>
	<table border="1">
		<%
		for(int i = 1; i <= 9; i++) {
			out.println("<tr>");
			for(int j = 2; j <= 9; j++) {
				out.print("<td>"+j+" * "+i+" = "+(j*i)+" </td>");
			}
			out.println("</tr>");
			}
		%>
	</table>
</body>
</html>
  1. scriptlet으로만 작성했을 때
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style>
		table{border: 2px solid black;
			  border-collapse: collapse;
		}
	</style>
</head>
<body>
	<table border="1">
		<% for(int i = 1; i <= 9; i++) { %>
			<tr>
			<% for(int j = 2; j <= 9; j++) {%>
				<td>
					<%= j %> * <%= i %> = <%= j*i %>
				</td>
			<% } %>
			</tr>
		<% } %>
	</table>
</body>
</html>

gugudan 1.png

구구단 테이블 생성 방식 비교.png